// 云函数入口文件
const cloud = require('wx-server-sdk')
const { getClassImgUrl } = require('./utils/getClassImgUrl')

cloud.init({
    env: 'cloud1-4gqogyksa87ef4e2'
});
const db = cloud.database();
const wqb_grade = db.collection('wqb_grade'); // 年级里的错题数据库
// 云函数入口函数
exports.main = async (event, context) => {
    const { scene, gradeDesc, gid } = event;
    // 此用户记录是否存在
    const isExistGrade = await wqb_grade.doc(gid).get();
    return new Promise(async (resolve, reject) => {
        if (isExistGrade) {
            // GET_CLASS 场景，获取对应年级，对应课程
            if (scene === 'GET_CLASS') {
                const { desc1, desc2 } = gradeDesc;
                const { grade } = isExistGrade.data; // grade 类型是 Array
                let classArr; // 最后一层的课程数组
                grade.forEach((obj) => {
                    // 找到第一层
                    if (obj.text === desc1) {
                        // 找到第二层
                        const { children } = obj;
                        children.forEach((obj2) => {
                            if (obj2.text === desc2) {
                                classArr = obj2.class;
                            }
                        })
                    }
                });
                resolve(classArr);
            };

            // 添加课程
            if (scene === 'ADD_CLASS') {
                const { className } = event;
                const { desc1, desc2 } = gradeDesc;
                const { grade } = isExistGrade.data; // grade 类型是 Array
                let classArr; // 最后一层的课程数组
                let isExistClassName = false; // 你所添加的课程名，是否已经存在过了
                // 根据课程名，判断出图标地址
                const classImgUrl = getClassImgUrl(className);
                // 要添加的课程对象
                const classObj = {
                    classImgUrl,
                    name: className,
                    qidArr: []
                }
                // 找到要添加课程的位置
                grade.forEach((obj) => {
                    // 找到第一层
                    if (obj.text === desc1) {
                        // 找到第二层
                        const { children } = obj;
                        children.forEach((obj2) => {
                            if (obj2.text === desc2) {
                                // 判断此课程是否已经存在
                                obj2.class.forEach((item) => {
                                    if (item.name === className) {
                                        isExistClassName = true;
                                    }
                                })
                                obj2.class.push(classObj);
                                classArr = obj2.class;
                            }
                        })
                    }
                });
                // 将 newClassArr ，在数据库中进行替换
                if (!isExistClassName) {
                    wqb_grade.doc(gid).update({
                        data: {
                            grade,
                        }
                    });
                }
                resolve({ isExistClassName, classArr });
            }

            // 删除课程
            if (scene === 'DEL_CLASS') {
                const { index } = event;
                const { desc1, desc2 } = gradeDesc;
                const { grade } = isExistGrade.data; // grade 类型是 Array
                let classArr; // 最后一层的课程数组
                let qidArrLength = 0; // 此课程里面题目默认为0
                // 找到要添加课程的位置
                grade.forEach((obj) => {
                    // 找到第一层
                    if (obj.text === desc1) {
                        // 找到第二层
                        const { children } = obj;
                        children.forEach((obj2) => {
                            if (obj2.text === desc2) {
                                // 判断此课程有几道题目
                                qidArrLength = obj2.class[index].qidArr.length;
                                obj2.class.splice(index, 1); // 删除此项课程
                                classArr = obj2.class;
                            }
                        })
                    }
                });
                // 将 newClassArr ，在数据库中进行替换
                if (qidArrLength === 0) {
                    wqb_grade.doc(gid).update({
                        data: {
                            grade,
                        }
                    });
                }
                resolve({ qidArrLength, classArr });
            }

        } else {
            resolve('error');
        }

        // 根据gid，获取此用户的年级信息，作年级分析柱状图表用chart
        if (scene === 'GET_USER_GRADE') {
            resolve(isExistGrade);
        }
    })
}